在經過集成式學習(ensemble learning)之後的 tree based (像是 Random Forest, XGBoost, LightGBM) 機器學習演算法,該方法通常可以提高相當不錯的模型成效。但是其中的理論很難讓人去參透,常常被人詬病說是一個黑盒子。 一個黑盒子是很難去判斷裡面做了什麼事情,我們如果要進行做決策、改良模型等等,都需要了解這個演算法到底學習到了什麼。這時候模型解釋就相當重要,有一塊領域 Explainable AI 就是在探討這方面的知識。
「人非聖賢,孰能無過」,機器與人一樣不是聖賢,都可能會有犯錯的可能性。當發生預測錯誤的時候,若我們能夠透過解釋型 AI 告訴合理的原因,或許可為下一次改版做一些根因探討。
「科技始終來自於人性」,我們有時候很難跟我們的需求方講解或討論這些演算法的深奧的原理或數學知識,也隨著我們越來越倚重機器學習產出的結果,我們勢必也需要能了解其中的原因,我們才可以用的安心,讓大家放心(好像推廣產品XDDD)。
Shap 最早來源是賽局理論,詳細可以參考wiki。Shap 是將模型的預測解釋分析成每個因子的貢獻,計算每個特徵的 shapely value,來衡量該特徵對預測的貢獻度。如此一來,我們可以詳細了解每個因子的貢獻程度。
圖片來源自 shap 的 github 連結
Shap 是一個可以將機器學習透過視覺化方式輔助理解的 Explainable AI 套件,優點如下
pip install shap
import xgboost
import shap
classifier = xgboost.XGBClassifier().fit(X_train, y_train)
explainer = shap.Explainer(classifier)
shap_values = explainer(X_train)
# waterfall
shap.plots.waterfall(shap_values[0])
# force plot
shap.force_plot(explainer.expected_value, shap_values.values[0,:], X_train.iloc[0,:])
紅色代表正的貢獻度、藍色代表負的貢獻度
shap.summary_plot(shap_values, X_train)
這張圖真的是 shap 一大賣點,還可以操作 x 、y 軸 切換不同的維度看資料
# 看整體資料
shap.force_plot(explainer.expected_value, shap_values.values, X_train, plot_cmap="DrDb")
# bar plot
shap.plots.bar(shap_values)
# scatter plot
shap.plots.scatter(shap_values[:, "Age"], color=shap_values[:,"VIP"])
希望透過 shap 解釋性 AI 套件可以幫助在機器學習迷惘在黑盒子的人們,藉此大家可以更廣泛地應用機器學習所帶來的服務。
更詳細可以請參考連結
請問第一章圖當中的 f(x) 4.00 代表的意思是?
另外,如果不是 binary classification
那麼,紅藍顏色的意義又是?
f(x) 4.00 是 shap values 計算出來的值,要再取 logit 就會變成機率值
詳細可以參考此篇文章
https://github.com/slundberg/shap/issues/29
紅色代表提升 y 是 1 的機率,藍色則相反,拉扯的概念